/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tk.eigh.ksvg.component.gradients;

import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFProperty;

/**
 *
 * @author nt
 */
interface _GradientProperties {

    /**
     * gradientUnits = "userSpaceOnUse | objectBoundingBox"
     *<br/>
     * Defines the coordinate system for attributes ‘x1’, ‘y1’, ‘x2’ and
     * ‘y2’/‘cx’, ‘cy’, ‘r’, ‘fx’ and ‘fy’.
     *<br/>
     * If gradientUnits="userSpaceOnUse", ‘x1’, ‘y1’, ‘x2’ and ‘y2’/‘cx’, ‘cy’,
     * ‘r’, ‘fx’ and ‘fy’. represent values in the coordinate system that
     * results from taking the current user coordinate system in place at the
     * time when the gradient element is referenced (i.e., the user coordinate
     * system for the element referencing the gradient element via a ‘fill’ or
     * ‘stroke’ property) and then applying the transform specified by attribute
     * ‘gradientTransform’.
     *<br/>
     * If gradientUnits="objectBoundingBox", the user coordinate system for
     * attributes ‘x1’, ‘y1’, ‘x2’ and ‘y2’ is established using the bounding
     * box of the element to which the gradient is applied (see Object bounding
     * box units) and then applying the transform specified by attribute
     * ‘gradientTransform’.
     *<br/>
     * When gradientUnits="objectBoundingBox" and ‘gradientTransform’ is the
     * identity matrix, the normal of the linear gradient is perpendicular to
     * the gradient vector in object bounding box space (i.e., the abstract
     * coordinate system where (0,0) is at the top/left of the object bounding
     * box and (1,1) is at the bottom/right of the object bounding box). When
     * the object's bounding box is not square, the gradient normal which is
     * initially perpendicular to the gradient vector within object bounding box
     * space may render non-perpendicular relative to the gradient vector in
     * user space. If the gradient vector is parallel to one of the axes of the
     * bounding box, the gradient normal will remain perpendicular. This
     * transformation is due to application of the non-uniform scaling
     * transformation from bounding box space to user space. If attribute
     * ‘gradientUnits’ is not specified, then the effect is as if a value of
     * 'objectBoundingBox' were specified.
     *<br/>
     *<br/>
     * Animatable: yes.
     */
    @JSFProperty
    String getGradientUnits();

    /**
     * gradientTransform = "&lt;transform-list&gt;"
     *<br/>
     * Contains the definitions of an optional additional transformation from
     * the gradient coordinate system onto the target coordinate system (i.e.,
     * userSpaceOnUse or objectBoundingBox). This allows for things such as
     * skewing the gradient. This additional transformation matrix is
     * post-multiplied to (i.e., inserted to the right of) any previously
     * defined transformations, including the implicit transformation necessary
     * to convert from object bounding box units to user space. If attribute
     * ‘gradientTransform’ is not specified, then the effect is as if an
     * identity transform were specified.
     *<br/>
     * Animatable: yes.
     */
    @JSFProperty
    String getGradientTransform();

    /**
     * spreadMethod = "pad | reflect | repeat"
     *<br/>
     * Indicates what happens if the gradient starts or ends inside the bounds
     * of the target rectangle. Possible values are: 'pad', which says to use
     * the terminal colors of the gradient to fill the remainder of the target
     * region, 'reflect', which says to reflect the gradient pattern
     * start-to-end, end-to-start, start-to-end, etc. continuously until the
     * target rectangle is filled, and repeat, which says to repeat the gradient
     * pattern start-to-end, start-to-end, start-to-end, etc. continuously until
     * the target region is filled. If the attribute is not specified, the
     * effect is as if a value of 'pad' were specified.
     *<br/>
     * Animatable: yes.
     */
    @JSFProperty
    String getSpreadMethod();
}
